AWS Lambda + API Gateway + AWS SAM + GoLang で虹河ラキちゃんの Slack bot を作ったよーっ!(o'▽'o)🐸
概要
きらっきーっ!☆ミ
虹河ラキ Developer の焼きそばメロンパンです。
https://gyazo.com/063a43916955bbc91d4e7c5e7ad28e8d
Lambda を使った Slack bot の記事は幾つかあるが、SAM を使ったり Go で書いたりしてる記事は無かったので作った。
モチベが上がらなかったのでコマンド等は省略してる。
流れ
1. aws-cli と asw-sam-cli を これ に従って導入 3. aws-sam-cli で init コマンドを叩いてプロジェクトの雛形生成
4. Go でソースを書く (自分は こんな感じ で書いた) 5. ビルドして sam のコマンドでデプロイ
6. 完成!
解説
AWS Lambda とは
FaaS とか呼ばれてる物で、あるイベントに対して起動する簡易(?)サーバ。
リクエストの URI と Lambda を 1 対 1 で紐づけて管理するので、API の数だけ Lambda を作ることになる。(はず)
イベントは HTTP リクエストだけじゃなくて、S3 のファイルアップロード等もトリガーに出来る。
今回のような規模なら無料で使えるのでかなり良さげ。
最近ではサーバレスやマイクロサービスとかで使われてるイメージがある。
API Gateway とは
外部からのリクエストのインタフェースになり、Lambda にイベントを送る。
これ以外にも用途はあるっぽいがあまり使ったことが無い。
AWS SAM とは
主にサーバレス等でデプロイや各サービスの管理が楽になるモデル。
CloudFormation 拡張されたテンプレートファイルにサービスの構成を記述。
すると、aws-sam-cli から AWS Lambda にコードを自動デプロイすることが可能になる。
AWS Lambda は S3 にアップロードしたり API Gateway の設定をしたりとそのまま利用するとちょっと面倒なことが多いが、 AWS SAM を利用することでそのへんが全て CLI から自動で出来るので、Lambda の実装のみに集中出来る。
また、aws-sam-cli は AWS SAM を利用するにあたって必要なファイルを自動生成とかしてくれるので便利。
Outgoin Webhooks とは
Slack の Webhook の一種で、Slack 内で特定の文字列が発言された場合に予め設定しておいたサーバにリクエストを投げる。
サーバ側では特定の文字列の内容に従って、bot に発言させる内容を JSON で返すことが出来る。
今回はサーバを AWS Lambda に設定している。
GoLang とは
有名なあのキモい動物がマスコットの言語。
1ヶ月間 cluster のインターンで学ばさせて頂いたが、自分にかなり合っていた良い言語だと感じた。
個人的には Ruby と同じくらい好きになった。
特徴は Ruby のような手軽さに、静的型付け言語の安全性を取り入れたイメージだった。
比較的安心感あるコードを短期間で実装出来て、スタートアップとかだったらかなり良いのではと思った。
この辺の話はちゃんと調べて書かないと叩かれちゃうので詳しくは各自で調べて頂けたらと思う。
今回書いた Go のコードは これ だけど、かなり適当に書いてるのでいつかリファクタする。 虹河ラキちゃんとは
本当はここに大きくラキちゃんの画像を載せたいが、権利問題とか怖いのでやめとく。
虹河ラキちゃんは普段「Reno」や「パチスロパルサー」等の回胴式遊技機 (パチスロ) を制作している 山佐株式会社 様 が創造して下さった VTuber で、2018年2月23日 から多分自社製品の宣伝を目的として活動を開始した。
キャラクターの特徴はあざとい後輩キャラといったイメージ、非常にかわいい。
また、2018年8月3日 の生放送では MMD モデルの 配布 が行われた。 ラキちゃんのモデルを Unity で読み込んで遊ぶの結構楽しいので、今度記事書いてみようと思う。
山佐株式会社の求人を眺めてみたが、ラキちゃんに関われそうな業種は「映像プログラマー」かなぁと思ったけど詳細は不明。
虹河ラキちゃんの関連URLは下記の通り。
まとめ
Slack bot を趣味で運用したいがサーバ費は掛けたくない、でも AWS Lambda はちょっと面倒...。
そんな人は AWS SAM を使ってみると結構楽になると思う。
この記事では Go を使っているが、Go 以外にも JS とか Python でも書けた気がする。
サーバレスについては色々思うことはあるが、少なくとも bot 運用ぐらいなら簡単に出来ることが分かった。
Lambda の認知度は高いが、AWS SAM は知らない人多い気がしたので、この記事で知ってもらえればと思う。